package com.briup.corejava.day20;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * 使用随机文件访问流，去文件中插入一段字符串
 * 例：hello world123 -> hello worldbriup123
 */
public class Test3 {
    public static void main(String[] args) {
        File file = new File("src/com/briup/corejava/day20/file/a.txt");
        RandomAccessFile raf = null;
        try {
            raf = new RandomAccessFile(file,"rw");
            // 分析读写逻辑
            // 1、找到截取的位置
            int pos = 11;
            raf.seek(pos);
            // 2、将位置之后的内容进行保存
            int len = -1;
            byte[] buf = new byte[1024];
            // 准备一个可以拼接的字符串对象 StringBuffer StringBuilder
            StringBuilder sb = new StringBuilder(); // 线程不安全
            while((len = raf.read(buf))!=-1){
                sb.append(new String(buf,0,len));
            }
            // 得到末尾处的字符串的数据
            String footer = sb.toString();
            // 准备插入的数据
            String data = "briup";
            // 拼接
            data = data + footer;
            // 写入
            raf.seek(11);
            // 写出的方法很多，根据场景选择
            raf.write(data.getBytes());
            // 回到初识位置读取
            raf.seek(0);
            len = -1;
            buf = new byte[1024];
            while ((len=raf.read(buf))!=-1){
                System.out.println(new String(buf,0,len));
            }

        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if(raf != null){
                try {
                    raf.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}
